#include <vector>
#include <iostream>
#include <map>
#include <fstream>
#include "ElementXML.h"


int treeTransformation(const XML * xml, const XML * xslSheet)
{
	// we call the function recursively from the root to its children 
	/*
	On stocke tout l'arbre xsl dans une map[balise,template].

	On recherche le template correspondant, et on le parcourt
		-Si on a des balises non xsl , on les recopie dans le fichier de sortie

		-Si on a xsl:valueof on récupère le texte du noeud xml et on le recopie dans le fichier
		-Si on a xsl:applytemplates on parcourt tous les fils du noeud xml concerné et on les recopie un à un dans le fichier de sortie 
	NOTE: Faire gaffe aux erreurs de transformation (un valueof sur un noeud qui n'est pas un texte)
	*/
	
	//Ouverture du fichier html
	ofstream fichier ("HtmlResult.html", ios::out | ios::ate);
	
	if (fichier)
	{
		map<string, ElementXML> mapXsl;
		vector<NodeXML *> children = xslSheet->getChildren();
		vector<NodeXML *>::iterator it;
		
		//on cree la map
		for ( it = children.begin(); it != children.end(); it++)
		{
			if (it->getName() == "xsl:template") 
				mapXsl.insert(make_pair(it->getAttributes()[0]->getValue()), /*on passe l'object pointé par it*/);
			

		}

		// On récupere les fils de xml
		vector<NodeXML *> children = xml->getChildren();
		vector<NodeXML *>::iterator it;
		//pour chaque fils on appelle la fonction recursive toHTML
			
	}
	else
	{
		cerr << "Probleme lors de l'ouverture du fichier\n" ;
		//On arrive pas à ouvrir le fichier
		return -1;
	}

	 
}


int toHtml(const ElementXML *elem, const XslSheet * sheet/* voir si on passe le fichier en param, et la map*/)
{
	// Transform the xml tag into a html tag

	/*On recherche le template correspondant, et on le parcourt
		-Si on a des balises non xsl , on les recopie dans le fichier de sortie

		-Si on a xsl:valueof on récupère le texte du noeud xml et on le recopie dans le fichier
		-Si on a xsl:applytemplates on parcourt tous les fils du noeud xml concerné et on les recopie un à un dans le fichier de sortie  
			voir pour la recursivité 

	*/

	//Si on trouve un template on l'applique sinon on recopie dans le fichier
	
	
	
}
